SageMath常用函数

您所在的位置:网站首页 python 求原根 SageMath常用函数

SageMath常用函数

2024-01-21 18:30| 来源: 网络整理| 查看: 265

SageMath常用函数 一、算术函数 1.1 基本运算 +、-、*、/

加减乘除大家都懂

近似除法(RealDoubleField) print(RDF(5/3))#近似除法 print(5/3) 1.6666666666666667 5/3

通常用来在近似计算中将表达式变成实数,损失一定精度,但可以提高计算效率

模除 print(5//3) 1 幂运算 print(2^3,2**3) 8 8 向下、向上取整 print(floor(5/3),ceil(5/3)) 1 2 1.2 最大公因数&最小公倍数 print(gcd(6,9),lcm(6,9)) 3 18 1.3 扩展欧几里得算法 a=6 b=9 g,s,t=xgcd(a,b) print(str(g)+"="+str(s)+"*"+str(a)+"+"+str(t)+"*"+str(b)) 3=-1*6+1*9 1.4 幂模运算 print("17^20200301(mod 105)="+str(power_mod(17,2020301,105))) 17^20200301(mod 105)=47 1.5 模逆运算 print("5^-1="+str(inverse_mod(5,14))+"(mod 14)") 5^-1=3(mod 14) 1.7 中国剩余定理

{ x ≡ 1 ( m o d 11 ) x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 4 ( m o d 7 ) \begin{cases} x\equiv1(mod 11)\\ x\equiv2(mod 3)\\ x\equiv3(mod 5)\\ x\equiv4(mod 7)\\ \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​x≡1(mod11)x≡2(mod3)x≡3(mod5)x≡4(mod7)​

print(crt([1,2,3,4],[11,3,5,7])) 683

即 { x ≡ 683 ( m o d 1155 ) \begin{cases}x\equiv683(mod 1155)\end{cases} {x≡683(mod1155)​

1.8 素数相关函数

判断是否为素数

print(is_prime(3),is_prime(4))#判断是否为素数 True False

求第几位素数

print(nth_prime(1),nth_prime(2),nth_prime(10))#第几个素数 2 3 29

求小于a的最大素数、大于a的最小素数

print("大于10的最小素数:"+str(next_prime(10))+",小于10的最大素数:"+str(previous_prime(10))) 大于10的最小素数:11,小于10的最大素数:7

前n个素数

print(primes_first_n(10))#前十个素数 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

区间内的素数

print(list(primes(2,30)))#区间[2,30)内的素数,左闭右开 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

欧拉函数

print(euler_phi(31))#欧拉函数 30 1.9 整数分解

分解整数

print(factor(100)) 2^2 * 5^2

椭圆曲线分解寻找素因子

print(ecm(1234567)) GMP-ECM 7.0.4 [configured with MPIR 3.0.0, --enable-asm-redc] [ECM] Input number is 1234567 (7 digits) Using B1=10, B2=84, polynomial x^1, sigma=1:3332739923 Step 1 took 0ms Step 2 took 0ms ********** Factor found in step 2: 127 Found prime factor of 3 digits: 127 Prime cofactor 9721 has 4 digits

二次筛法分解

print(qsieve(12345678901234567890123456789012345678902)) ([2, 22, 6418, 70598, 349745854025172608009389976741900498, 3847204394276898688103289744160905478, 1122334445566778899102132435364758698082], '')

仅求出素因子

print(prime_divisors(100)) [2, 5] 二、代数系统 2.1 P元有限域

有限域 z 7 z_7 z7​

k1=GF(7)

操作 z 7 z_7 z7​上的元素

a=k1(5) print(a,a^6,a^-1) 5 1 3

求解 x 5 ≡ 2 ( m o d 7 ) x^5\equiv2(mod 7) x5≡2(mod7)和 x 2 ≡ 2 ( m o d 7 ) x^2\equiv2(mod 7) x2≡2(mod7)

print(k1(2).nth_root(5),k1(2).sqrt(2)) 4 3

z 7 z_7 z7​的模多项式,以及其根

print(k1.modulus(),k1.gen()) x + 6 1

用本原多项式生成 z 7 z^7 z7

k2=GF(7,modulus='primitive') print(k2.modulus(),k2.gen()) x + 4 3 2.2 p n p^n pn元有限域

定义一个 z 7 3 z^{7^3} z73的有限域,以及对应的本原多项式、本原多项式的根、有限域元素个数、元素的阶

k1.=GF(7^3,modulus='primitive') print(k1.modulus()) print(k1.gen()) print(k1.order()) print((x+2).multiplicative_order()) x^3 + 6*x^2 + 4 x 343 19

在有限域中计算 x 100 x^{100} x100

print(x^100) 2*x^2 + x + 4

指定不可约多项式生成有限域,如 x 3 + 2 ∗ x 2 + 1 x^3+2*x^2+1 x3+2∗x2+1

k2.=GF(7^3,modulus=[1,0,2,1])#低次写到高次的系数 print(k2.modulus()) print(k2.gen()) print(k2.order()) print((a+2).multiplicative_order()) x^3 + 2*x^2 + 1 a 343 38

计算极小多项式,可通过列表获取系数

print(a^100) print((a^100).minimal_polynomial()) print((a^100).minimal_polynomial()[0],(a^100).minimal_polynomial()[1]) 2*a^2 + 5*a + 4 x^3 + 4*x^2 + 4*x + 6 6 4 2.3 整数环

环的定义

r=Zmod(26) r=Integers(26)#环Z26的两种写法 a=r(9) b=r(8) print(a*b) 20

求逆、求离散对数、判断是否平方元、求平方根

a^-1,a.log(7),a.is_square(),a.sqrt() (3, 4, True, 3)

求a的乘法阶和加法阶

a.multiplicative_order(),a.additive_order() (3, 26)

求a的极小多项式

print(a.minimal_polynomial()) x + 17 2.4 多项式环 一元多项式环 R.=ZZ[]#定义R为整系数上的多项式环,文字为x f=4*x^2+4*x+1#定义f为整系数一元多项式 print(f.is_irreducible(),f.factor())#判断一元多项式是否可约 False (2*x + 1)^2

定义多项式的两种方式

g=3*x^2+2*x+1#直接定义 s=R([1,2,3])#使用列表定义 print(g==s) True

模除多项式、查找多项式的整数解

print(f.factor_mod(3)) print(f.roots()) (x + 2)^2 [] 环上的多项式 R.=Zmod(26)[]#定义R为Z26上的环,文字为x f=(x+1)*(x^3+x+1)#定义环上的一个多项式f print(f) print("多项式的次数:",f.degree())#多项式的次数 print("多项式的值:",f(7))#多项式的值 print("幂运算:",f^2)#幂运算 print("最高公因式:",f.gcd(x+1))#最高公因式 print("扩展欧几里得算法:",f.xgcd(x+1))#扩展欧几里得算法 print("带余除法:",f.quo_rem(3*x-1))#带余除法 print("模运算:",f%(3*x-1))#模运算 print("整除:",f//(3*x-1))#整除 x^4 + x^3 + x^2 + 2*x + 1 多项式的次数: 4 多项式的值: 0 幂运算: x^8 + 2*x^7 + 3*x^6 + 6*x^5 + 7*x^4 + 6*x^3 + 6*x^2 + 4*x + 1 最高公因式: x + 1 扩展欧几里得算法: (x + 1, 0, 1) 带余除法: (9*x^3 + 12*x^2 + 13*x + 5, 6) 模运算: 6 整除: 9*x^3 + 12*x^2 + 13*x + 5 域上的多项式 R.=Zmod(13)[]#定义R为Z13上的环,文字为x 与GF(13)相同 #R.=GF(13)[] 等价定义 f=(x+1)*(x^3+x+1)#定义环上的一个多项式f print(f.is_irreducible(),f.factor())#判断多项式是否可约,多项式因式分解 print(f.roots())#多项式求根,以及重数 False (x + 1) * (x + 6) * (x^2 + 7*x + 11) [(12, 1), (7, 1)] 三、矩阵操作

定义整数环上的矩阵,并作求逆运算

mt=matrix(r,2,2,[[24,15],[19,14]])#定义矩阵并赋值 print(mt[0][0]) print(mt) print(mt^-1) 24 [24 15] [19 14] [12 15] [19 2]

矩阵乘法

mt2=matrix(r,2,2,[[17,23],[23,20]]) print(mt2) print((mt^-1)*mt2) [17 23] [23 20] [3 4] [5 9]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3